﻿using System;
using System.Diagnostics;
using System.Windows.Forms;
using Kyoh.Lib.Component.Arguments;
using System.IO;

namespace Kyoh.App.Renamer
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Properties.Settings.Default.Upgrade();

            System.Threading.Thread.GetDomain().UnhandledException += UnhandledException;

            bool validArgs = false;
            RenamerArgument _args = new RenamerArgument();
            var parser = new ArgumentsParser<RenamerArgument>();
            try
            {
                var parsed = parser.Parse(args, _args);
                if (parsed.Remained.Count > 0)
                    _args.BatchFile = parsed.Remained[0];
                if (Path.IsPathRooted(_args.BatchFile) && File.Exists(_args.BatchFile))
                    validArgs = true;
            }
            catch (InvalidArgumentException)
            {
            }

            Application.ThreadException += ThreadException;
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if(validArgs)
                Application.Run(new MainForm(_args));
            else
                Application.Run(new MainForm());
        }

        static void UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Debug.WriteLine(e.ExceptionObject);
        }

        static void ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            Debug.WriteLine(e.Exception);
        }
    }
}
